import http from '@/utils/request';

/**
 * 待办事项接口类型定义
 */
export interface Todo {
    id?: number | string;    // ID，支持数字或字符串类型
    title: string;           // 标题
    date: string;           // 日期
    notes?: string;         // 备注说明
    amount?: number;        // 数量
    needReminder?: string;  // 是否需要提醒
    location?: string;      // 地点
    createBy?: string;      // 创建人
    createTime?: string;    // 创建时间
    updateBy?: string;      // 更新人
    updateTime?: string;    // 更新时间
    remark?: string;       // 备注
    params?: Record<string, any>;  // 额外参数
    pageNum?: number;      // 页码
    pageSize?: number;     // 每页大小
    status?: string;       // 待办状态：0-未完成，1-已完成
}

/**
 * 高级查询参数接口
 */
export interface HighQuery {
    pageNum?: number;        // 当前页码
    pageSize?: number;       // 每页大小
    searchValue?: string;    // 搜索值
    title?: string;         // 标题
    date?: string;         // 日期
    orderByColumn?: string; // 排序列
    isAsc?: string;        // 排序方向
    params?: Record<string, any>; // 其他参数
}

/**
 * 分页结果接口
 */
export interface PageResult<T> {
    msg: string;
    code: number;
    data: {
        records: T[];
        pageNumber: number;
        pageSize: number;
        totalPage: number;
        totalRow: number;
    };
}

/**
 * 礼金记录接口
 */
export interface GiftRecord {
    id?: number | string;
    title: string;           // 标题，用作场合
    date: string;           // 日期
    notes?: string;         // 备注说明
    amount?: number;        // 金额
    needReminder?: string;  // 是否需要提醒
    location?: string;      // 地点
    createBy?: string;      // 创建人
    createTime?: string;    // 创建时间
    updateBy?: string;      // 更新人
    updateTime?: string;    // 更新时间
    remark?: string;       // 备注
}

/**
 * 分页查询参数接口
 */
export interface PageQuery {
    pageNum: number;
    pageSize: number;
    searchValue?: string;
}

/**
 * 接口响应数据结构
 */
export interface ApiResponse<T> {
    msg: string;
    code: number;
    data: T;
}

/**
 * 获取待办事项列表
 * @param query 高级查询参数
 */
export function getTodoList(query: HighQuery) {
    return http.post('/system/todo/list', query);
}

/**
 * 导出待办事项列表
 * @param query 高级查询参数
 */
export function exportTodo(query: HighQuery) {
    return http.post('/system/todo/export', query, {
        responseType: 'arraybuffer'
    });
}

/**
 * 获取待办事项详情
 * @param id 待办事项ID
 */
export function getTodoDetail(id: number) {
    return http.get(`/system/todo/${id}`);
}

/**
 * 新增待办事项
 * @param data 待办事项数据
 */
export function addTodo(data: Todo) {
    return http.post('/system/todo', data);
}

/**
 * 修改待办事项
 * @param data 待办事项数据
 */
export function updateTodo(data: Todo) {
    return http.put('/system/todo', data);
}

/**
 * 删除待办事项
 * @param ids 待办事项ID数组
 */
export function deleteTodo(ids: number[]) {
    return http.delete(`/system/todo/${ids.join(',')}`);
}

/**
 * 更新待办事项状态
 * @param id 待办事项ID
 * @param status 状态：0-未完成，1-已完成
 */
export function updateTodoStatus(id: string, status: number) {
    return http.put(`/system/todo/${id}/status`, { status });
}

/**
 * 根据时间查询待办列表
 * @param time 时间，格式：YYYY-MM-DD
 * @returns 待办列表数据
 */
export function listByTime(time: string): Promise<ApiResponse<Todo[]>> {
    return http.get('/system/todo/listByTime', {
        params: {
            time
        }
    });
}

/**
 * 根据月份查询待办事项数量
 * @param time 时间，格式：YYYY-MM-DD
 * @returns 每天的待办事项数量
 */
export function listByMonth(time: string): Promise<ApiResponse<Record<string, number>>> {
    return http.get('/system/todo/listByMonth', {
        params: {
            time
        }
    });
}

/**
 * 获取统计面板数据
 */
export function getDashboardData() {
    return http.get('/system/todo/dashboard');
}

/**
 * 分页查询礼金记录
 * @param query 查询参数
 */
export function listByPage(query: PageQuery) {
    return http.post<PageResult<GiftRecord>>('/system/todo/listByPage', query);
} 